"""
使用openpyxl库来操作Excel文件，实现在不改变其他工作表和其他单元格的情况下，向指定工作表的特定单元格写入数据并保存：
"""

from openpyxl import load_workbook
import os


def update_excel_cell(file_path, sheet_name, cell_updates, new_file_path=None):
    """
    更新Excel文件中指定工作表的特定单元格，保持其他内容不变

    参数:
        file_path (str): Excel文件路径
        sheet_name (str): 要操作的工作表名称
        cell_updates (dict): 要更新的单元格字典，格式: {'A1': '值1', 'B2': '值2'}
        new_file_path (str, optional): 新文件保存路径，None则覆盖原文件

    返回:
        bool: 操作是否成功
    """
    try:
        # 检查文件是否存在
        if not os.path.exists(file_path):
            print(f"错误: 文件 {file_path} 不存在")
            return False

        # 加载工作簿（保留原始格式）
        wb = load_workbook(file_path)

        # 检查工作表是否存在
        if sheet_name not in wb.sheetnames:
            print(f"错误: 工作表 '{sheet_name}' 不存在")
            return False

        # 获取目标工作表
        ws = wb[sheet_name]

        # 更新指定单元格
        for cell_ref, value in cell_updates.items():
            ws[cell_ref] = value

        # 保存文件
        save_path = new_file_path if new_file_path else file_path
        wb.save(save_path)
        print(f"成功更新并保存到: {save_path}")
        return True

    except Exception as e:
        print(f"操作失败: {str(e)}")
        return False


# 使用示例
if __name__ == "__main__":
    current_directory = os.path.dirname(os.path.realpath(__file__))
    # 示例文件路径（请替换为实际路径）
    excel_file = os.path.join(current_directory, "template", "5GDataTemplate.xlsx")

    # 示例更新内容（工作表名和单元格值）
    updates = {
        "Sheet2": {  # 工作表名
            "B3": "360基站东标题",  # 单元格A1写入新值
            "B4": "360基站东标题",  # 单元格B3写入数字
            "C5": "=SUM(B1:B4)",  # 单元格C5写入公式
            "V6": 12.22222,
            "W6": 22.11111,
            "X6": "=v6+w6",
        },
        "Sheet3": {"A8": "2023-12-25", "B9": 99.99},
    }

    # 对每个工作表执行更新
    for sheet_name, cell_updates in updates.items():
        fo = os.path.join(current_directory, "输出", "5GDataTemplate123.xlsx")
        success = update_excel_cell(
            file_path=excel_file,
            sheet_name=sheet_name,
            cell_updates=cell_updates,
            new_file_path=excel_file,  # 另存为新文件
        )

        if not success:
            print(f"更新工作表 '{sheet_name}' 时出现问题")
